class SqStack:
    def __init__(self):
        # 初始化顺序栈
        self.elem = [None] * max_size  # 为顺序栈动态分配一个最大容量为 max_size 的数组空间
        self.top, self.base = 0, 0  # top 指向栈顶下一个位置，base 指向栈底，空栈时两者相同
        self.stack_size = max_size  # stack_size 置为栈的最大容量 max_size

    def push(self, e):
        # 将元素压入栈
        if self.top == self.stack_size:  # 判断栈满，满则抛出错误提示
            raise Exception('栈已满')
        self.elem[self.top] = e  # 元素 e 压入栈顶位置
        self.top += 1  # 栈顶指针加 1

    def pop(self):
        # 将栈顶元素弹出
        if self.top == self.base:  # 判断栈是否为空
            raise Exception('栈已空')
        self.top -= 1  # 栈顶指针减 1
        return self.elem[self.top]

    def get_top(self):
        # 返回栈顶元素，不改变栈状态
        if self.top == self.base:  # 判断栈是否为空
            raise Exception('栈已空')
        return self.elem[self.top - 1]

    def stack_empty(self):
        # 判断栈是否为空
        return self.top == self.base

    def __len__(self):
        # 栈的长度，即已入栈的元素个数
        return self.top


if __name__ == "__main__":
    max_size = 100  # 定义栈的最大容量
    s = SqStack()
    s.push(0)
    s.push(1)
    print('栈的长度为：', len(s))
    print('此时的栈顶元素为：', s.get_top())
    s.pop()
    s.pop()
    print('此时栈是否为空：', s.stack_empty())
